package chapter11;

import java.util.*;

/**
 * @author : DuJiabao
 * @Date : 2021/2/19 16:30
 * @Project : thinking_in_java
 * @File : null.java
 * @Desc :
 */
public class ListTest {
  public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);  // 添加元素
    list.add(1);  // 添加元素
    list.add(2);  // 添加元素
    list.add(3);  // 添加元素
    list.remove(Integer.valueOf(1)); // 删除和指定对象相等的第一个对象,[1, 2, 3]
    list.remove(1); // 删除元素，以下标,[1,3]
    System.out.println(list.contains(3)); // true
    System.out.println(list.get(0));  // 获取下标为0的元素，但不删除, 1
    System.out.println(list.indexOf(1));  // 获取第一个对象为1的下标, 0

    list.add(5);  // 添加元素
    list.add(6);  // 添加元素
    list.add(7);  // 添加元素
    list.add(8);  // 添加元素
    System.out.println(list);  // [1, 3, 5, 6, 7, 8]
    System.out.println(list.subList(1, 4));   // 左闭右开的子List，[3, 5, 6]
    System.out.println(list.containsAll(Arrays.asList(1, 5, 3)));   // 是否包含所有元素，顺序不定

    list.add(1);  // 添加元素
    list.add(-1);  // 添加元素
    list.add(-7);  // 添加元素
    list.add(-8);  // 添加元素
    Collections.sort(list);  // 从小到大排列， [-8, -7, -1, 1, 1, 3, 5, 6, 7, 8]
    //list.sort(Comparator.naturalOrder()); // 从小到大排列，两者等效
    list.sort(Comparator.reverseOrder());  // 从大到小排列， [8, 7, 6, 5, 3, 1, 1, -1, -7, -8]

    Collections.shuffle(list);  // 随机打乱， [6, 5, 1, 8, -7, -8, 7, -1, 1, 3]

    list.removeAll(Arrays.asList(1, 3));   // 删除list里面所有满足条件的对象，[-7, 5, 6, -8, 8, 7, -1]

    list.set(1, 8); // 下标为1的元素，设为8, [-7, 8, 6, -8, 8, 7, -1]

    list.addAll(Arrays.asList(1, 2));  // 在尾部添加所有元素，[-7, 8, 6, -8, 8, 7, -1, 1, 2]
    list.addAll(1, Arrays.asList(4, 5));  // 在下标为1的位置插入所有元素，[-7, 4, 5, 8, 6, -8, 8, 7, -1, 1, 2]

    list.retainAll(Arrays.asList(1, 2, 3, 4, 6));  // 取交集，[4, 6, 1, 2]

    Object[] objects = list.toArray();  // list转化为array
    Integer[] integers = list.toArray(new Integer[0]);// list转化为array，并且将类型也确定了

    list.clear(); // 清空， []
    System.out.println(list.isEmpty());  // true
  }
}
